var sy = sy || {};
sy.userInfo = null;
$(function() {
	
})

/**
 * 更改easyui加载panel时的提示文字
 * 
 * @author 黄建雄
 * 
 * @requires jQuery,EasyUI
 */
$.extend($.fn.panel.defaults, {
	loadingMessage: '加载中....'
});

/**
 * 更改easyui加载grid时的提示文字
 * 
 * @author 黄建雄
 * 
 * @requires jQuery,EasyUI
 */
$.extend($.fn.datagrid.defaults, {
	loadMsg: '数据加载中....'
});

/**
 * panel关闭时回收内存，主要用于layout使用iframe嵌入网页时的内存泄漏问题
 * 
 * @author 黄建雄
 * 
 * @requires jQuery,EasyUI
 * 
 */
$.extend($.fn.panel.defaults, {
	onBeforeDestroy: function() {
		var frame = $('iframe', this);
		try {
			if(frame.length > 0) {
				for(var i = 0; i < frame.length; i++) {
					frame[i].src = '';
					frame[i].contentWindow.document.write('');
					frame[i].contentWindow.close();
				}
				frame.remove();
				if(navigator.userAgent.indexOf("MSIE") > 0) { // IE特有回收内存方法
					try {
						CollectGarbage();
					} catch(e) {}
				}
			}
		} catch(e) {}
	}
});

/**
 * 防止panel/window/dialog组件超出浏览器边界
 * 
 * @author 黄建雄
 * 
 * @requires jQuery,EasyUI
 */
sy.onMove = {
	onMove: function(left, top) {
		var l = left;
		var t = top;
		if(l < 1) {
			l = 1;
		}
		if(t < 1) {
			t = 1;
		}
		var width = parseInt($(this).parent().css('width')) + 14;
		var height = parseInt($(this).parent().css('height')) + 14;
		var right = l + width;
		var buttom = t + height;
		var browserWidth = $(window).width();
		var browserHeight = $(window).height();
		if(right > browserWidth) {
			l = browserWidth - width;
		}
		if(buttom > browserHeight) {
			t = browserHeight - height;
		}
		$(this).parent().css({ /* 修正面板位置 */
			left: l,
			top: t
		});
	}
};
$.extend($.fn.dialog.defaults, sy.onMove);
$.extend($.fn.window.defaults, sy.onMove);
$.extend($.fn.panel.defaults, sy.onMove);

/**
 * 
 * 通用错误提示
 * 
 * 用于datagrid/treegrid/tree/combogrid/combobox/form加载数据出错时的操作
 * 
 * @author 黄建雄
 * 
 * @requires jQuery,EasyUI
 */
sy.onLoadError = {
	onLoadError: function(XMLHttpRequest) {
		if(parent.$ && parent.$.messager) {
			parent.$.messager.progress('close');
			parent.$.messager.alert('错误', XMLHttpRequest.responseText);
		} else {
			$.messager.progress('close');
			$.messager.alert('错误', XMLHttpRequest.responseText);
		}
	}
};
//$.extend($.fn.datagrid.defaults, sy.onLoadError);
//$.extend($.fn.treegrid.defaults, sy.onLoadError);
//$.extend($.fn.tree.defaults, sy.onLoadError);
//$.extend($.fn.combogrid.defaults, sy.onLoadError);
//$.extend($.fn.combobox.defaults, sy.onLoadError);
//$.extend($.fn.form.defaults, sy.onLoadError);

/**
 * 扩展combobox在自动补全模式时，检查用户输入的字符是否存在于下拉框中，如果不存在则清空用户输入
 * 
 * @author 黄建雄
 * 
 * @requires jQuery,EasyUI
 */
$.extend($.fn.combobox.defaults, {
	onShowPanel: function() {
		var _options = $(this).combobox('options');
		if(_options.mode == 'remote') { /* 如果是自动补全模式 */
			var _value = $(this).combobox('textbox').val();
			var _combobox = $(this);
			if(_value.length > 0) {
				$.post(_options.url, {
					q: _value
				}, function(result) {
					if(result && result.length > 0) {
						_combobox.combobox('loadData', result);
					}
				}, 'json');
			}
		}
	},
	onHidePanel: function() {
		var _options = $(this).combobox('options');
		if(_options.mode == 'remote') { /* 如果是自动补全模式 */
			var _data = $(this).combobox('getData'); /* 下拉框所有选项 */
			var _value = $(this).combobox('getValue'); /* 用户输入的值 */
			var _b = false; /* 标识是否在下拉列表中找到了用户输入的字符 */
			for(var i = 0; i < _data.length; i++) {
				if(_data[i][_options.valueField] == _value) {
					_b = true;
				}
			}
			if(!_b) { /* 如果在下拉列表中没找到用户输入的字符 */
				$(this).combobox('setValue', '');
			}
		}
	}
});

/**
 * 扩展combogrid在自动补全模式时，检查用户输入的字符是否存在于下拉框中，如果不存在则清空用户输入
 * 
 * @author 黄建雄
 * 
 * @requires jQuery,EasyUI
 */
$.extend($.fn.combogrid.defaults, {
	onShowPanel: function() {
		var _options = $(this).combogrid('options');
		if(_options.mode == 'remote') { /* 如果是自动补全模式 */
			var _value = $(this).combogrid('textbox').val();
			if(_value.length > 0) {
				$(this).combogrid('grid').datagrid("load", {
					q: _value
				});
			}
		}
	},
	onHidePanel: function() {
		var _options = $(this).combogrid('options');
		if(_options.mode == 'remote') { /* 如果是自动补全模式 */
			var _data = $(this).combogrid('grid').datagrid('getData').rows; /* 下拉框所有选项 */
			var _value = $(this).combogrid('getValue'); /* 用户输入的值 */
			var _b = false; /* 标识是否在下拉列表中找到了用户输入的字符 */
			for(var i = 0; i < _data.length; i++) {
				if(_data[i][_options.idField] == _value) {
					_b = true;
				}
			}
			if(!_b) { /* 如果在下拉列表中没找到用户输入的字符 */
				$(this).combogrid('setValue', '');
			}
		}
	}
});

/**
 * 扩展validatebox，添加新的验证功能
 * 
 * @author 黄建雄
 * 
 * @requires jQuery,EasyUI
 */
$.extend($.fn.validatebox.defaults.rules, {
	eqPwd: { /* 验证两次密码是否一致功能 */
		validator: function(value, param) {
			return value == $(param[0]).val();
		},
		message: '密码不一致！'
	}
});

/**
 * 扩展tree和combotree，使其支持平滑数据格式
 * 
 * @author 黄建雄
 * 
 * @requires jQuery,EasyUI
 * 
 */
sy.loadFilter = {
	loadFilter: function(data, parent) {
		var opt = $(this).data().tree.options;
		var idField, textField, parentField;
		if(opt.parentField) {
			idField = opt.idField || 'id';
			textField = opt.textField || 'text';
			parentField = opt.parentField || 'pid';
			var i, l, treeData = [],
				tmpMap = [];
			for(i = 0, l = data.length; i < l; i++) {
				tmpMap[data[i][idField]] = data[i];
			}
			for(i = 0, l = data.length; i < l; i++) {
				if(tmpMap[data[i][parentField]] && data[i][idField] != data[i][parentField]) {
					if(!tmpMap[data[i][parentField]]['children'])
						tmpMap[data[i][parentField]]['children'] = [];
					data[i]['text'] = data[i][textField];
					tmpMap[data[i][parentField]]['children'].push(data[i]);
				} else {
					data[i]['text'] = data[i][textField];
					treeData.push(data[i]);
				}
			}
			return treeData;
		}
		return data;
	}
};
$.extend($.fn.combotree.defaults, sy.loadFilter);
$.extend($.fn.tree.defaults, sy.loadFilter);

/**
 * 扩展treegrid，使其支持平滑数据格式
 * 
 * @author 黄建雄
 * 
 * @requires jQuery,EasyUI
 * 
 */
$.extend($.fn.treegrid.defaults, {
	loadFilter: function(data, parentId) {
		var opt = $(this).data().treegrid.options;
		var idField, treeField, parentField;
		if(opt.parentField) {
			idField = opt.idField || 'id';
			treeField = opt.textField || 'text';
			parentField = opt.parentField || 'pid';
			var i, l, treeData = [],
				tmpMap = [];
			for(i = 0, l = data.length; i < l; i++) {
				tmpMap[data[i][idField]] = data[i];
			}
			for(i = 0, l = data.length; i < l; i++) {
				if(tmpMap[data[i][parentField]] && data[i][idField] != data[i][parentField]) {
					if(!tmpMap[data[i][parentField]]['children'])
						tmpMap[data[i][parentField]]['children'] = [];
					data[i]['text'] = data[i][treeField];
					tmpMap[data[i][parentField]]['children'].push(data[i]);
				} else {
					data[i]['text'] = data[i][treeField];
					treeData.push(data[i]);
				}
			}
			return treeData;
		}
		return data;
	}
});

/**
 * 创建一个模式化的dialog
 * 
 * @author 黄建雄
 * 
 * @requires jQuery,EasyUI
 * 
 */
sy.modalDialog = function(options) {
	var opts = $.extend({
		title: '&nbsp;',
		width: 480,
		height: 360,
		modal: true,
		onClose: function() {
			$(this).dialog('destroy');
		}
	}, options);
	opts.modal = true; // 强制此dialog为模式化，无视传递过来的modal参数
	if(options.url) {
		opts.content = '<iframe id="" src="' + options.url + '" allowTransparency="true" scrolling="auto" width="100%" height="98%" frameBorder="0" name=""></iframe>';
	}
	return $('<div/>').dialog(opts);
};

/**
 * 更换主题
 * 
 * @author 黄建雄
 * @requires jQuery,EasyUI
 * @param themeName
 */
sy.changeTheme = function(themeName) {
	var $easyuiTheme = $('#easyuiTheme');
	var url = $easyuiTheme.attr('href');
	var href = url.substring(0, url.indexOf('themes')) + 'themes/' + themeName + '/easyui.css';
	$easyuiTheme.attr('href', href);

	var $iframe = $('iframe');
	if($iframe.length > 0) {
		for(var i = 0; i < $iframe.length; i++) {
			var ifr = $iframe[i];
			try {
				$(ifr).contents().find('#easyuiTheme').attr('href', href);
			} catch(e) {
				try {
					ifr.contentWindow.document.getElementById('easyuiTheme').href = href;
				} catch(e) {}
			}
		}
	}

	sy.cookie('easyuiTheme', themeName, {
		expires: 7
	});
};

/**
 * 滚动条
 * 
 * @author 黄建雄
 * @requires jQuery,EasyUI
 */
sy.progressBar = function(options) {
	if(typeof options == 'string') {
		if(options == 'close') {
			$('#syProgressBarDiv').dialog('destroy');
		}
	} else {
		if($('#syProgressBarDiv').length < 1) {
			var opts = $.extend({
				title: '&nbsp;',
				closable: false,
				width: 300,
				height: 60,
				modal: true,
				content: '<div id="syProgressBar" class="easyui-progressbar" data-options="value:0"></div>'
			}, options);
			$('<div id="syProgressBarDiv"/>').dialog(opts);
			$.parser.parse('#syProgressBarDiv');
		} else {
			$('#syProgressBarDiv').dialog('open');
		}
		if(options.value) {
			$('#syProgressBar').progressbar('setValue', options.value);
		}
	}
};

sy.info = function(msg) {
	$.messager.alert("提示", msg, "info");
}
sy.error = function(msg) {
	$.messager.alert("提示", msg, "error");
}

$.extend($.fn.datebox.defaults, {
	formatter: function(date) {
		var y = date.getFullYear();
		var m = date.getMonth() + 1;
		var d = date.getDate();
		return y + "-" + m + "-" + d;
	}
});
$.extend($.fn.combobox.defaults, {
	editable: false,
});
/**
 * 自定义easyui的dabebox日期转换
 */
$.extend($.fn.datebox.defaults, {
	parser: function(s) {
		if(s == null || s == '') {
			return new Date();
		}
		if(!isNaN(s)) {
			return new Date(s);
		}
		var ds = s.split("-");
		if(ds.length == 3) {
			s = ds[1] + '/' + ds[2] + '/' + ds[0];
		}
		var t = Date.parse(s);
		if(!isNaN(t)) {
			return new Date(t);
		} else {
			return new Date();
		}
	},
	currentText: "今天",
	closeText: "关闭",
	okText: "确认",
	editable: false,
	formatter: function(date) {
		var y = date.getFullYear();
		var m = date.getMonth() + 1;
		var d = date.getDate();
		return y + "-" + m + "-" + d;
	},
});
$.extend($.fn.datetimebox.defaults, {
	cleanText: $.fn.datebox.defaults.cleanText,
	currentText: $.fn.datebox.defaults.currentText,
	closeText: $.fn.datebox.defaults.closeText,
	okText: $.fn.datebox.defaults.okText,
	missingMessage: $.fn.datebox.defaults.missingMessage,
	editable: false
});
//日历默认文本
$.extend($.fn.calendar.defaults, {
	months: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
	weeks: ['日', '一', '二', '三', '四', '五', '六']
});
//验证框默认提示
$.extend($.fn.validatebox.defaults, {
	missingMessage: "不能为空"
});
$.extend($.fn.textbox.defaults, {
	missingMessage: "不能为空"
});
$.extend($.fn.passwordbox.defaults, {
	missingMessage: "不能为空"
});
$.extend($.fn.numberbox.defaults, {
	missingMessage: "不能为空"
});

//提示框按钮文字
$.extend($.messager.defaults, {
	ok: "确认",
	cancel: "取消"
});
$.extend($.fn.pagination.defaults, {
	beforePageText: "页数",
	afterPageText: "/ {pages}",
	displayMsg: "显示 {from} 至 {to} 条,总共 {total} 条"
});
/*===================下载文件
 * options:{
 * url:'',  //下载地址
 * data:{name:value}, //要发送的数据
 * method:'post'
 * }
 */
sy.DownLoadFile = function(options) {
	var config = $.extend(true, {
		method: 'post'
	}, options);
	var $iframe = $('<iframe id="down-file-iframe" />');
	var $form = $('<form target="down-file-iframe" method="' + config.method + '" />');
	$form.attr('action', config.url);
	for(var key in config.data) {
		$form.append('<input type="hidden" name="' + key + '" value="' + config.data[key] + '" />');
	}
	$iframe.append($form);
	$(document.body).append($iframe);
	$form[0].submit();
	$iframe.remove();
};
sy.UpLoadFile = function(form, url, success) {
	var formData = new FormData(form);
	$.ajax({
		url: url,
		type: 'post',
		data: formData,
		async: false,
		cache: false,
		contentType: false,
		processData: false,
		success: success
	});
};

//获取url中的参数
sy.getUrlParam = function(name) {
	var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
	var r = window.location.search.substr(1).match(reg); //匹配目标参数
	if(r != null) return unescape(r[2]);
	return null; //返回参数值
}